package 我的Java学习_算法基础.day_04;

public class _063_找出边界位1的最大子方阵 {
    public static void main(String[] args) {
        int[][] a = {
                {1,1,1,1},
                {1,0,1,1},
                {1,1,1,1},
                {1,0,1,1}
        };
        int N = find(a);
        System.out.println(N);
    }
    private static int find(int[][] array){
        int N = array.length;
        int n = N;
        while (n>0){
            //数组每个元素作为左顶角，检查是否满足n边长都为1的方阵
            for(int i = 0;i<n;i++){
                if(i+n>N) break ;     //左底角不存在
                l3:for(int j = 0;j<n;j++){
                    if(j+n>N) break ; //右顶角不存在
                    int r = i,c = j;
                    //上边
                    while(c< j + n){
                        if(array[r][c++]==0) continue l3;
                    }
                    //恢复
                    c--;
                    //右边
                    while (r<i+n){
                        if(array[r++][c]==0) continue l3;
                    }
                    r--;
                    //下边
                    while(c>=j){
                        if(array[r][c--]==0) continue l3;
                    }
                    c++;
                    //左边
                    while(r>=i){
                        if(array[r--][c]==0) continue l3;
                    }
                    r++;
                    return n;
                }
            }
            n--;
        }
        return 0;
    }
}
